package com.cfc.stage1;

import org.junit.Test;

/**
 * @description: 回文数
 *   https://leetcode.cn/problems/palindrome-number/description/
 * @author: yangxuan10
 * @create: 2024-04-02 16:57
 **/
public class IsPalindrome {

    @Test
    public void test() {
        System.out.println(1  %  10);
        System.out.println(1  /  10);

        System.out.println(isPalindrome2(1234567899));
    }

    /**
     * 官方题解呀
     *  时间复杂度：O(logn)，对于每次迭代，我们会将输入除以 101010，因此时间复杂度为 O(logn)。
     *  空间复杂度：O(1)。我们只需要常数空间存放若干变量。
     * @param x
     * @return
     */
    public boolean isPalindrome3(int x) {
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int reversalNum = 0;
        while (x > reversalNum) {
            reversalNum = reversalNum * 10 + x % 10;
            x = x / 10;
        }
        return x == reversalNum || reversalNum / 10 == x;
    }


    public boolean isPalindrome2(int x) {
        if (x < 0) {
            return false;
        }
        String copy = x+"";
        StringBuilder str = new StringBuilder();
        while (true) {
            int x1 = x % 10;
            str.append(x1);
            if ( (x = x / 10) <= 0) {
                break;
            }
        }
        return copy.equals(str.toString());
    }

    /**
     * 原创
     */
    public boolean isPalindrome1(int x) {
        String x1 = x + "";
        char[] chars = x1.toCharArray();
        int length = chars.length;
        int startIndex = 0;
        int endIndex = length -1;
        while (true) {
            if (startIndex >= endIndex) {
                break;
            }
            if (chars[startIndex] != chars[endIndex]) {
                 return false;
            }
            startIndex++;
            endIndex--;
        }
        return true;
    }

    /**
     * 原创
     * 你能不将整数转为字符串来解决这个问题吗？
     * @param x
     * @return
     */
    public boolean isPalindrome(int x) {
        String x1 = x + "";
        char[] chars = x1.toCharArray();
        StringBuilder x2 = new StringBuilder();
        for (int i = chars.length-1; i >= 0; i--) {
            x2.append(chars[i]);
        }
        return x1.equals(x2.toString());
    }

}